package br.com.abenildo.modelo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.com.abenildo.controle.Livro;
import br.com.abenildo.exception.LivroNaoEncontradoException;
import br.com.abenildo.exception.RepositorioException;

public class RepositorioLivroBDR {
	
	private Connection connection = null;
	private Livro livro;
	 
	
	public RepositorioLivroBDR()throws Exception{
		this.connection = ConnectionManager.reservaStatement("oracle");
	}
	
	public void Inserir(Livro livro)throws RepositorioException,SQLException{
		 PreparedStatement stmt = null;
		 
		 if(livro != null){
			 try{
				 String sql = "INSERT INTO livro (Cod_Livro,Nome_Livro,Tipo_Livro) VALUES (12345678901,?,?)";
				 stmt = this.connection.prepareStatement(sql);
				 stmt.setLong(1, livro.getCodLivro());
				 stmt.setString(2, livro.getNomeLivro());
				 stmt.execute();
				 
			 } catch(SQLException ex){
				  throw new RepositorioException(ex);
			  }
			   finally{
				   stmt.close();
			   }
		 }
	}
	
	 public void Remover(int CodLivro)throws LivroNaoEncontradoException,RepositorioException,SQLException{
		 PreparedStatement stmt = null;
		 
		 try{
			 String sql = "DELETE FROM livro WHERE Cod_Livro = ?";
			 stmt = this.connection.prepareStatement(sql);
			 stmt.setLong(1,CodLivro);
			 stmt.execute();
		 }
		  catch (SQLException ex){
			  throw new RepositorioException(ex);
		  }
		   finally{
			   stmt.close();
		   }
	 }
	 
	 	public Livro Procurar(int CodLivro)throws LivroNaoEncontradoException,RepositorioException,SQLException{
	 		Livro livro = null;
	 		PreparedStatement stmt = null;
			ResultSet rs = null;
			
			 try{
				   String sql = "SELECT *FROM livro WHERE Cod_Livro = ? ";
				   stmt = this.connection.prepareStatement(sql);
				   stmt.setLong(1,CodLivro);
				    rs = stmt.executeQuery();
				    
				    //SE O PROXIMO FOR DIFERENTE LEVANTE UMA NOVA EXCESSAO
				    if(!rs.next())throw new LivroNaoEncontradoException(CodLivro);
				    
				   // Livro livro = new Livro(rs.getString("CodLivro"),rs.getString("NomeLivro"),rs.getString("TipoLivro"));
			 }
			 catch (SQLException ex){
			    	throw new RepositorioException(ex);
			    }
			   
			      finally{
				    
					stmt.close();
				   
					rs.close();
					
			   }
			 return livro;
			 
	 	}
	 	
	 	public void Atualizar(Livro livro)throws LivroNaoEncontradoException,RepositorioException,SQLException{
	 		PreparedStatement stmt = null;
	 		
	 		try{
	 			if(livro !=  null);
	 			try{
	 				
	 			String sql = "UPDATE livro SET Nome_Livro = java";
	 			sql += "WHERE id = 1";
	 			stmt = 	this.connection.prepareStatement(sql);
	 			stmt.setLong(1, livro.getCodLivro());
	 			stmt.setString(2, livro.getNomeLivro());
	 			Integer resultado = stmt.executeUpdate();
	 			
	 			if(resultado == 0)throw new LivroNaoEncontradoException(livro.getCodLivro());
	 		}
	 			
	 		catch(SQLException ex){
				  throw new RepositorioException(ex);
			  }
		  } finally {
				   stmt.close();
			   }
	 		
	 	}
	 	
	 	 public boolean Existe(int CodLivro)throws RepositorioException,SQLException{
	 		 PreparedStatement stmt = null;
	 		 ResultSet rs = null;
	 		 
	 		 try{
	 			 String sql = "SELECT CONT(*) AS QUANTIDADE FROM livro WHERE Cod_Livro = ?";
				   stmt = this.connection.prepareStatement(sql);
				   stmt.setLong(1,livro.getCodLivro());
				   rs = stmt.executeQuery();
				   rs.next();
				   
				   if(rs.getInt("Quantidade")== 0){
					   return false;
				   }else{
						   return true;
					   }
				   }
	 		 catch(SQLException ex){
	 			 throw new RepositorioException(ex);
	 		 }
	 		 finally{
	 			 stmt.close();
	 			 rs.close();
	 		 }
	 	 }
	 	 
	 	  public ArrayList<Livro>Listar()throws SQLException{
	 	  ArrayList<Livro>livros = new ArrayList<Livro>();
	 		 PreparedStatement stmt = null;
	 		 ResultSet rs = null;
	 		 
	 		 try{
	 			String sql = "SELECT *FROM livro";
		    	  stmt = this.connection.prepareStatement(sql);
		    	  rs = stmt.executeQuery();
		    	  
		    	  while(rs.next()){
		    		  
		    		 
		    		  livros.add(livro);
		    		  System.out.println(rs.getString("CodLivro"));
		    	  }		    	  
	 	  }
	 		 catch(SQLException ex){
	 			 throw new SQLException(ex);
	 		 }finally{
	 			 stmt.close();
	 			 rs.close();
	 		 }
	 		 return livros;
	 		  
	 	  }
}
